20-4 Ts

我們在第一節已經說明了如何讀取音訊檔案,並在第二節說明如何播放音訊。MATLAB 也支援直接由麥克風讀取訊號,因此可以直接進行聲音的錄製,所使用的指令是 audiorecord 和 recordblocking,請見下列基本範例:

Example 1: 20-音訊讀寫、錄製與播放/audioRecord01.mduration=3; % 錄音時間 recObj=audiorecorder; fprintf('按任意鍵後開始 %g 秒錄音:', duration); pause fprintf('錄音中...'); recordblocking(recObj, duration); fprintf('錄音結束\n'); fprintf('按任意鍵後開始播放:'); pause play(recObj);按任意鍵後開始 3 秒錄音:錄音中...錄音結束 按任意鍵後開始播放:

在上述範例中,我們先使用 audiorecorder 來產生錄音物件 recObj,然後再使用 recordblocking 指令來進行三秒的錄音。(請直接執行上述範例後,才看得出整體的流程。)

由於在上例中,我們在使用 audiorecorder 時,並未指定任何參數,所以錄音程式會以下列預設參數來進行錄音:取樣頻率為 8000 Hz,取樣點解析度為 8 bits,單聲道錄音。

若要使用不同的參數來進行錄音,我們可以將這些參數送到 audiorecorder 指令,範例如下:

Example 2: 20-音訊讀寫、錄製與播放/audioRecord02.mfs=16000; % 取樣頻率 nBits=16; % 取樣點解析度,必須是 8 或 16 或 24 nChannel=1; % 聲道個數,必須是 1(單聲道) 或 2(雙聲道或立體音) duration=3; % 錄音時間(秒) recObj=audiorecorder(fs, nBits, nChannel); fprintf('按任意鍵後開始 %g 秒錄音:', duration); pause fprintf('錄音中...'); recordblocking(recObj, duration); fprintf('錄音結束\n'); fprintf('按任意鍵後開始播放:'); pause play(recObj); y = getaudiodata(recObj, 'double'); % get data as a double array plot((1:length(y))/fs, y); xlabel('Time (sec)'); ylabel('Amplitude');按任意鍵後開始 3 秒錄音:錄音中...錄音結束 按任意鍵後開始播放:

在上例中,有兩個重點:


MATLAB程式設計:入門篇